home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
newsgroups
/
misc.19981211-19990422
/
000424_news@watsun.cc.columbia.edu _Tue Mar 30 11:49:56 1999.msg
< prev
next >
Wrap
Internet Message Format
|
1999-04-21
|
6KB
Return-Path: <news@watsun.cc.columbia.edu>
Received: from newsmaster.cc.columbia.edu (newsmaster.cc.columbia.edu [128.59.59.30])
by watsun.cc.columbia.edu (8.8.5/8.8.5) with ESMTP id LAA08089
for <kermit.misc@watsun.cc.columbia.edu>; Tue, 30 Mar 1999 11:49:56 -0500 (EST)
Received: (from news@localhost)
by newsmaster.cc.columbia.edu (8.8.5/8.8.5) id LAA13704
for kermit.misc@watsun.cc.columbia.edu; Tue, 30 Mar 1999 11:43:29 -0500 (EST)
X-Authentication-Warning: newsmaster.cc.columbia.edu: news set sender to <news> using -f
From: dn5006@my-dejanews.com
Subject: Container in C-Kermit/Kermit 95
Date: Tue, 30 Mar 1999 16:05:25 GMT
Organization: Deja News - The Leader in Internet Discussion
Message-ID: <7dqsnu$m0v$1@nnrp1.dejanews.com>
To: kermit.misc@watsun.cc.columbia.edu
; CONTAINER IS A KEY CONCEPT IN OBJECT-ORIENTED PROGRAMMING.
; SMALLTALK, C++, etc. HAVE STANDARD LIBRARIES OF CONTAINERS.
; THE FOLLOWING SCRIPT DEFINES THE CLASS BASKET IN C-KERMIT/KERMIT 95.
; BASKET OFFERS A RICH USAGE INTERFACE:
;
; basket basket_name
; create a new object identified as basket_name.
;
; basket_name.set key value
; deposit into the object basket_name the element
; identified by 'key' that has the content 'value'.
; Both key and value can be alpha, numeric, alpha-numeric.
;
; basket_name.get key
; query the element identified by 'key'.
;
; basket_name.size
; query the number of the elements in the basket_name.
;
; basket_name.head
; position to the first element of the basket for query.
;
; basket_name.tail
; position to the last element of the basket for query.
;
; basket_name.pairs
; query all the pairs key => value in the basket_name.
;
; basket_name.step_pair
; query each pair key => value in the basket_name.
;
; basket_name.values
; query all the values in the basket_name.
;
; basket_name.step_value
; query each value in the basket_name.
;
; basket_name.keys
; query all the keys in the basket_name.
;
; basket_name.step_key
; query each key in the basket_name.
;
; basket_name.reset
; remove all the elements in the basket_name.
;
; basket_name.destroy
; remove the basket_name itself.
define basket {
local self
assign self \%1
_assign \m(self)_size 0
_assign \m(self)_value 0
_assign \m(self)_key 0
_define \m(self).set {
local \%s \%i
if NOT define \%1 end 1 ... missing 1.param
if NOT define \%2 end 1 ... missing 2.param
assign \%s \fbreak(\v(macro),.)
xif NOT defined \m(\%s_value[\%1]) { ; key not yet used?
assign \%i \m(\%s_size) ; get previous key index
increment \%i ; make next key index
_assign \%s_size \%i ; save this key index
_assign \%s_key[\%i] \%1 ; save key
}
_assign \%s_value[\%1] \%2 ; save value
echo \m(\%s_value[\%1])
}
_define \m(self).get {
local \%s
assign \%s \fbreak(\v(macro),.)
echo \m(\%s_value[\%1])
return \m(\%s_value[\%1])
}
_define \m(self).step_value {
local \%s \%i \%k \%r \%n \%m
assign \%s \fbreak(\v(macro),.)
assign \%m \m(\%s_size)
assign \%n \m(\%s_value)
assign \%n \feval(\fmod(\%n, \%m) + 1)
_assign \%s_value \%n
assign \%k \m(\%s_key[\%n])
assign \%r \m(\%s_value[\%k])
echo \m(\%s_value[\%k])
return \m(\%s_value[\%k])
}
_define \m(self).step_pair {
local \%s \%i \%k \%r \%n \%m
assign \%s \fbreak(\v(macro),.)
assign \%m \m(\%s_size)
assign \%n \m(\%s_value)
assign \%n \feval(\fmod(\%n, \%m) + 1)
_assign \%s_value \%n
assign \%k \m(\%s_key[\%n])
assign \%r \m(\%s_value[\%k])
echo \%k => \%r
return \%k => \%r
}
_define \m(self).pairs {
local \%s \%i \%k \%r \%n \%m \%z
assign \%s \fbreak(\v(macro),.)
for \%i 1 \m(\%s_size) 1 {
assign \%k \m(\%s_key[\%i])
assign \%v \m(\%s_value[\%k])
assign \%z \%z\%k => \%v\v(newline)
echo \%k => \%v
}
return \%z
}
_define \m(self).size {
local \%s
assign \%s \fbreak(\v(macro),.)
echo \m(\%s_size)
return \m(\%s_size)
}
_assign \m(self).head {
_assign \m(self)_value 0
_assign \m(self)_key 0
}
_define \m(self).tail {
local \%s \%t
assign \%s \fbreak(\v(macro),.)
assign \%t \m(\%s_size)
_assign \%s_value \feval(\%t - 1)
_assign \%s_key \feval(\%t - 1)
}
_define \m(self).reset {
local \%s
assign \%s \fbreak(\v(macro),.)
for \%i 1 \m(\%s_size) 1 {
assign \%k \m(\%s_key[\%i])
_define \%s_key[\%i]
_define \%s_value[\%k]
}
_assign \%s_size 0
_assign \%s_value 0
_assign \%s_key 0
}
_define \m(self).step_key {
local \%s \%i \%k \%r \%n \%m
assign \%s \fbreak(\v(macro),.)
assign \%m \m(\%s_size)
assign \%n \m(\%s_key)
assign \%n \feval(\fmod(\%n, \%m) + 1)
_assign \%s_key \%n
assign \%k \m(\%s_key[\%n])
echo \%k
return \%k
}
_define \m(self).keys {
local \%s \%z
assign \%s \fbreak(\v(macro),.)
for \%i 1 \m(\%s_size) 1 {
assign \%k \m(\%s_key[\%i])
assign \%z {\%z\%k }
}
echo \%z
return \%z
}
_define \m(self).values {
local \%s \%z \%v
assign \%s \fbreak(\v(macro),.)
for \%i 1 \m(\%s_size) 1 {
assign \%k \m(\%s_key[\%i])
assign \%v \m(\%s_value[\%k])
assign \%z {\%z\%v }
}
echo \%z
return \%z
}
_define \m(self).destroy {
local \%s \%n \%i \%v \%k
assign \%s \fbreak(\v(macro),.)
\%s.reset
_define \%s_size
_define \%s_value
_define \%s.size
_define \%s.set
_define \%s.get
_define \%s.head
_define \%s.pairs
_define \%s.step_pair
_define \%s.tail
_define \%s.reset
_define \%s.step_key
_define \%s.keys
_define \%s.step_value
_define \%s.values
_define \%.destroy
}
}
Dat Nguyen
Airline Telecommunications and Information Services
770 Sherbrooke West
Montreal, Quebec
Canada H3A 1G1
Email dat.nguyen&sita.int
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/ Search, Read, Discuss, or Start Your Own